home *** CD-ROM | disk | FTP | other *** search
Java Source | 2000-06-23 | 7.6 KB | 241 lines |
- import java.awt.*;
- import java.awt.event.*;
-
- import java.util.Vector;
- import java.util.StringTokenizer;
-
- import quicktime.QTException;
- import quicktime.QTSession;
- import quicktime.app.display.QTCanvas;
- import quicktime.app.anim.Compositor;
- import quicktime.app.image.QTTransition;
- import quicktime.std.movies.Atom;
- import quicktime.std.movies.AtomContainer;
- import quicktime.std.StdQTConstants;
- import quicktime.qd.QDDimension;
-
- import quicktime.util.EndianOrder;
-
-
- /**
- * QTZoo Module 8 - Using QuickTime Transitions
- * This application requires QuickTime for Java
- *
- * @author Levi Brown
- * @author Michael Hopkins
- * @author Apple Computer, Inc.
- * @version 8.0 4/10/2000
- * Copyright: © Copyright 1999 Apple Computer, Inc. All rights reserved.
- *
- * Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- * ("Apple") in consideration of your agreement to the following terms, and your
- * use, installation, modification or redistribution of this Apple software
- * constitutes acceptance of these terms. If you do not agree with these terms,
- * please do not use, install, modify or redistribute this Apple software.
- *
- * In consideration of your agreement to abide by the following terms, and subject
- * to these terms, Apple grants you a personal, non-exclusive license, under Apple’s
- * copyrights in this original Apple software (the "Apple Software"), to use,
- * reproduce, modify and redistribute the Apple Software, with or without
- * modifications, in source and/or binary forms; provided that if you redistribute
- * the Apple Software in its entirety and without modifications, you must retain
- * this notice and the following text and disclaimers in all such redistributions of
- * the Apple Software. Neither the name, trademarks, service marks or logos of
- * Apple Computer, Inc. may be used to endorse or promote products derived from the
- * Apple Software without specific prior written permission from Apple. Except as
- * expressly stated in this notice, no other rights or licenses, express or implied,
- * are granted by Apple herein, including but not limited to any patent rights that
- * may be infringed by your derivative works or by other works in which the Apple
- * Software may be incorporated.
- *
- * The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- * WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- * COMBINATION WITH YOUR PRODUCTS.
- *
- * IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- * OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- * (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- */
-
-
- public class MainFrame extends Frame
- {
- public static final int WIDTH = 640;
- public static final int HEIGHT = 480;
-
- /**
- * Creates the QTCanvas, loads media, and displays window contents
- */
- public MainFrame( String s )
- {
- super( s );
- setResizable( false );
- setBounds( 0, 0, WIDTH, HEIGHT );
-
- myQTCanvas = new QTCanvas( QTCanvas.kInitialSize, 0.5F, 0.5F ); // Create new QT Canvas
- add( myQTCanvas );
-
- loadPanes( );
-
- try
- {
- myQTCanvas.setClient (mapPane.getCompositor(), true); //Set the canvas to display the map pane
- }
- catch (QTException exc)
- {
- exc.printStackTrace();
- }
-
- addWindowListener( new WindowAdapter()
- {
- public void windowClosing( WindowEvent we )
- {
- QTSession.close();
- dispose();
- }
- public void windowClosed( WindowEvent we )
- {
- System.exit( 0 );
- }
- });
-
- show();
- toFront();
- }
-
- /**
- * Loads the data displayed in each of the animal panes
- */
- public void loadPanes()
- {
- actionListener = new Action();
-
- mapPane = new MapPane( );
- mapPane.addActionListener(actionListener);
-
- zebraPane = new AnimalPane( );
- zebraPane.addActionListener(actionListener);
- }
-
- protected void transition(ZooPane fromPane, ZooPane toPane, Point effectLoc )
- {
- Compositor fromComp = fromPane.getCompositor();
- Compositor toComp = toPane.getCompositor();
- try
- {
- //Make sure the compositor has had a chance to drawn itself
- toComp.setGWorld(quicktime.qd.QDGraphics.validScratch);
- toComp.redraw(null);
-
- QTTransition transition = new QTTransition(new QDDimension(MainFrame.WIDTH, MainFrame.HEIGHT));
- transition.setTime(1000);
- transition.setSourceImage(fromComp);
- transition.setDestinationImage(toComp);
- transition.setProfiled(false);
- myQTCanvas.setClient (transition, true);
-
- AtomContainer effectSample = new AtomContainer();
-
- if (effectLoc == null)
- {
- // We are using SMPTE Effects so set the what atom to smpt
- effectSample.insertChild (Atom.kParentIsContainer, StdQTConstants.kEffectWhatAtom, 1, 0, EndianOrder.flipNativeToBigEndian32(StdQTConstants.kWipeTransitionType));
- // We are using SMPTE effect number 74 - start at 0%, stop at 100%
- effectSample.insertChild(Atom.kParentIsContainer, StdQTConstants.kEffectWipe, 1, 0, EndianOrder.flipNativeToBigEndian32(StdQTConstants.kRandomWipeTransitionType));
- }
- else
- {
- effectSample.insertChild(Atom.kParentIsContainer, StdQTConstants.kEffectWhatAtom, 1, 0, EndianOrder.flipNativeToBigEndian32(StdQTConstants.kExplodeTransitionType));
- effectSample.insertChild(Atom.kParentIsContainer, StdQTConstants.kExplodeTransitionType, 1, 0, EndianOrder.flipNativeToBigEndian32(StdQTConstants.kExplodeTransitionType));
- }
- transition.setEffect(effectSample);
- transition.doTransition();
-
- myQTCanvas.setClient (toComp, true);
-
- toPane.start();
- fromPane.stop();
- }
- catch (QTException exc)
- {
- exc.printStackTrace();
- }
- }
-
-
- /**
- * Responds to actions targeting the MainFrame
- * Responsible for handling clicks in the animal regions in the Map Pane
- */
- class Action implements ActionListener
- {
- public void actionPerformed(ActionEvent event)
- {
- Object source = event.getSource();
- String command = event.getActionCommand();
- StringTokenizer st = new StringTokenizer(command, ";");
- Vector params = new Vector();
-
- while (st.hasMoreTokens())
- {
- params.addElement(st.nextToken());
- }
-
- //Minimalistic error checking...
- if (params.size() < 3)
- {
- System.err.println("Not enough parameters in command");
- return;
- }
-
- //Parse our action command for pertinate info
- String area = (String)params.elementAt(0);
- int xLoc = 0;
- int yLoc = 0;
-
- try
- {
- xLoc = Integer.parseInt((String)params.elementAt(1));
- } catch (NumberFormatException exc)
- {
- exc.printStackTrace();
- }
- try
- {
- yLoc = Integer.parseInt((String)params.elementAt(2));
- } catch (NumberFormatException exc)
- {
- exc.printStackTrace();
- }
-
- //Distribute appropriately
-
- if (source.equals(mapPane))
- {
- zebraPane.playSound();
- transition(mapPane, zebraPane, new Point(xLoc, yLoc));
- }
- else if (source instanceof AnimalPane)
- {
- if (area.equals("map"))
- {
- transition((AnimalPane)source, mapPane, null );
- }
- }
- }
- }
-
- protected ActionListener actionListener;
- protected QTCanvas myQTCanvas;
- protected MapPane mapPane;
- protected AnimalPane zebraPane;
- }
-